package models;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import play.data.Upload;
import play.db.DB;

public class Hino {

	private int codigo;
	private int codigo_usuario;
	private String letra;
	private String titulo;
	private String interprete;
	private int tipo;	// Orquestra, Instrumental, Acapella
	
	public Hino() {
		setCodigo(-1);
		setCodigo_usuario(-1);
		setLetra("");
		setTitulo("");
		setInterprete("");
		setTipo(-1);
	}
	
	public Hino(int codigo, int codigo_usuario, String letra, String titulo,
			String interprete, int tipo) {
		this.setCodigo(codigo);
		this.setCodigo_usuario(codigo_usuario);
		this.setLetra(letra);
		this.setTitulo(titulo);
		this.setInterprete(interprete);
		this.setTipo(tipo);
	}
	
	/**
     * Inserts the Hino object in the DB
     */
    public void save() throws SQLException {
    	// executeQuery para pegar o MAX de codigo
    	if(this.codigo == -1) {
    		ResultSet rs = DB.executeQuery("SELECT max(codigo) FROM hino");
    		rs.next();
    		
    		setCodigo(rs.getInt(1) + 1);
    	}
    	
    	DB.execute("INSERT INTO hino(codigo, codigo_usuario, letra, titulo, "
    			+ "interprete, tipo) VALUES("
    			+ "'" + Integer.toString(this.codigo) + "',"
    			+ "'" + Integer.toString(this.codigo_usuario) + "',"
    			+ "'" + this.letra + "',"
    			+ "'" + this.titulo + "',"
    			+ "'" + this.interprete + "',"
    			+ "'" + Integer.toString(this.tipo) + "'"
    			+ ")");
    }
    
    public static List<Hino> all() throws SQLException {
    	ResultSet rs = DB.executeQuery("SELECT * FROM hino");
    	
    	List<Hino> lista = new ArrayList<Hino>();
    	
    	while(rs.next()) {
    		Hino hino = new Hino(rs.getInt(1), rs.getInt(2), rs.getString(3), 
    				rs.getString(4), rs.getString(5), rs.getInt(6));
    		
    		lista.add(hino);
    	}
    	
    	return lista;
    }
    
    public static Hino findById(int codHino) throws SQLException {
    	ResultSet rs = DB.executeQuery("SELECT * FROM hino where codigo = '"
    			+ Integer.toString(codHino) + "'");
    	
    	Hino hino = null;
    	
    	if(rs.next()) {
    		hino = new Hino(rs.getInt(1), rs.getInt(2), rs.getString(3), 
    				rs.getString(4), rs.getString(5), rs.getInt(6));
    		
    		return hino;
    	}
    	
    	return hino;
    }
    
    public static List<Hino> hinosByTipo(int tipo) throws SQLException {
    	ResultSet rs = DB.executeQuery("SELECT * FROM hino where tipo = '"
    			+ Integer.toString(tipo) + "'");
    	
    	List<Hino> lista = new ArrayList<Hino>();
    	
    	while(rs.next()) {
    		Hino hino = new Hino(rs.getInt(1), rs.getInt(2), rs.getString(3), 
    				rs.getString(4), rs.getString(5), rs.getInt(6));
    		
    		lista.add(hino);
    	}
    	
    	return lista;
    }
    
	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	public int getCodigo() {
		return codigo;
	}

	public void setCodigo_usuario(int codigo_usuario) {
		this.codigo_usuario = codigo_usuario;
	}

	public int getCodigo_usuario() {
		return codigo_usuario;
	}

	public void setLetra(String letra) {
		this.letra = letra;
	}

	public String getLetra() {
		return letra;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setInterprete(String interprete) {
		this.interprete = interprete;
	}

	public String getInterprete() {
		return interprete;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}

	public int getTipo() {
		return tipo;
	}
	
	public static void delete(int codigoHino) {
		DB.execute("DELETE FROM hino WHERE codigo = '" + codigoHino + "'");
	}
}
